package main

import (
	"fmt"
	"math"
	"strings"
)

func BinaryFormat(n int32) string {
	a := uint32(n)               //有符号转为无符号
	sb := strings.Builder{}      //把多个短字符串拼接成一个长字符串
	c := uint32(math.Pow(2, 31)) //最高位是1，其他位全是0   10000000000000000000000000000000

	for i := 0; i < 32; i++ {
		if a&c != 0 {
			sb.WriteString("1") //往sb后面拼接“1”
		} else {
			sb.WriteString("0") //往sb后面拼接“0”
		}
		c >>= 1
	}
	return sb.String() //返回长度为32的字符串
}

func main() {
	//num 测试输入最小值，-4 最大值
	num := []int{-2147483648, -4, 2147483647}
	// bitnum 输出最小值, -4 最大值的对应二进制字符串
	bitnum := []string{"10000000000000000000000000000000", "11111111111111111111111111111100", "01111111111111111111111111111111"}
	//循环判断输入的三个数值是否等于对应二进制字符串
	for k, v := range num {
		if BinaryFormat(int32(v)) == bitnum[k] {
			fmt.Printf("BinaryFormat %d 转换 %s 正确\n", v, BinaryFormat(int32(v))) //正确转换输出结果
		} else {
			fmt.Printf("BinaryFormat %d 转换 %s 错误\n", v, BinaryFormat(int32(v))) //错误转换输出结果
		}
	}
}
